\documentclass[format=sigconf]{acmart}
%\documentclass{sig-alternate-05-2015}
\usepackage[utf8]{inputenc}
\usepackage{color}

\def\inputfig#1{\input #1}
\def\inputtex#1{\input #1}
\def\inputal#1{\input #1}
\def\inputcode#1{\input #1}
\newcommand\inputeps[1]{\includegraphics[width=\linewidth]{#1}}

\inputtex{logos.tex}
\inputtex{refmacros.tex}
\inputtex{other-macros.tex}
\inputtex{tikz-macros.tex}

\acmConference[ELS'20]{the 13th European Lisp Symposium}{April 27--28 2020}{%
  Z\"urich, Switzerland}
%\acmISBN{978-2-9557474-2-1}
\acmISBN{}
\acmDOI{10.5281/zenodo.3747553}

\setcopyright{rightsretained}

\begin{document}
%\conferenceinfo{12th ELS}{April 1--2, 2019, Genoa, Italy}

\title{Representing method combinations}

\author{Robert Strandh}
\email{robert.strandh@u-bordeaux.fr}

\affiliation{
  \institution{LaBRI, University of Bordeaux}
  \streetaddress{351 cours de la libération}
  \city{Talence}
  \country{France}}

%\numberofauthors{2}
%% \author{\alignauthor
%% Irène Durand\\
%% Robert Strandh\\
%% \affaddr{University of Bordeaux}\\
%% \affaddr{351, Cours de la Libération}\\
%% \affaddr{Talence, France}\\
%% \email{irene.durand@u-bordeaux.fr}
%% \email{robert.strandh@u-bordeaux.fr}}

%% \toappear{Permission to make digital or hard copies of all or part of
%%   this work for personal or classroom use is granted without fee
%%   provided that copies are not made or distributed for profit or
%%   commercial advantage and that copies bear this notice and the full
%%   citation on the first page. Copyrights for components of this work
%%   owned by others than the author(s) must be honored. Abstracting with
%%   credit is permitted. To copy otherwise, or republish, to post on
%%   servers or to redistribute to lists, requires prior specific
%%   permission and/or a fee. Request permissions from
%%   Permissions@acm.org.

%%   ELS '17, April 3 -- 6 2017, Brussels, Belgium
%%   Copyright is held by the owner/author(s). %Publication rights licensed to ACM.
%% %  ACM 978-1-4503-2931-6/14/08\$15.00.
%% %  http://dx.doi.org/10.1145/2635648.2635654
%% }


\begin{abstract}
The \commonlisp{} standard has few requirements on method
combinations, and so does the semi-standard metaobject protocol for
\commonlisp{}.  For that reason, there is great variety among
different \commonlisp{} implementations regarding how method
combinations are represented and handled.  Some implementations
allocate a new method-combination instance for each generic function,
whereas others attempt to reuse existing instances as much as possible.
Most implementations are able to verify the validity of
method-combination options for the built-in method-combination types,
but no free \commonlisp{} implementation can verify custom
method-combination types using the long form of the macro
\texttt{define-method\-combination} immediately when a generic function
is created, nor when a method-combination type is redefined.  Instead,
incompatibilities between supplied options and the method-combination
type are then verified only when an attempt is made to execute the
resulting method-combination procedure in order to create an effective
method.

We propose a technique that makes early detection of incompatible
method-combination options possible even for custom long-form
method-combination types.  We augment the lambda list of the
method-combination definition with \texttt{\&aux} entries that verify
restrictions, and we construct a function with the augmented lambda
list that will fail whenever there is such an incompatibility.  With
this technique, when an incompatibility is detected, we are also able
to signal more relevant errors than most existing free implementations
are able to do.
\end{abstract}

\begin{CCSXML}
<ccs2012>
<concept>
<concept_id>10011007.10011006.10011041.10011042</concept_id>
<concept_desc>Software and its engineering~Incremental compilers</concept_desc>
<concept_significance>500</concept_significance>
</concept>
<concept>
<concept_id>10011007.10011006.10011041.10011048</concept_id>
<concept_desc>Software and its engineering~Runtime environments</concept_desc>
<concept_significance>500</concept_significance>
</concept>
</ccs2012>
\end{CCSXML}

\ccsdesc[500]{Software and its engineering~Incremental compilers}
\ccsdesc[500]{Software and its engineering~Runtime environments}

%\printccsdesc

\keywords{\commonlisp{}, \clos{}, Meta-Object Protocol, Method combinations}

\maketitle
\inputtex{spec-macros.tex}

\inputtex{sec-introduction.tex}
\inputtex{sec-previous.tex}
\inputtex{sec-our-method.tex}
\inputtex{sec-conclusions.tex}
\inputtex{sec-acknowledgements.tex}

%\bibliographystyle{abbrv}
\bibliographystyle{plainnat}
\bibliography{representing-method-combinations}
\end{document}
